#******************************************************************************
# Привет!
#
# Меня зовут Роман Пионтик. Я задумал этот инструмент, чтобы сделать нашу
# с тобой жизнь чуточку проще. Давай я тебе быстро все здесь покажу на примере
# простой архитектуры.
#******************************************************************************

# Здесь можно подключить репозитории архитектуры
imports:
#  - https://dochub.info/documentation/root.yaml  # по прямой ссылке (попробуй раскомментировать и посмотри на результат)
#  - foo.yaml                                     # или по относительному пути

# Это аспекты. Аспекты - аналитические маркеры, позволяющие выделять
# сегменты архитектуры. Кликни на лупе слева и посмотри как они помогают
# найти то, что нужно.
aspects:
  auth:                       # Идентификатор аспекта
    title: Авторизация         # Название
    location: Авторизация     # Размещение в меню
  goods:
    title: Покупка товара
    location: Покупка товара
  goods.order:                # Структурированные идентификаторы аспектов определяют их иерархию
    title: Заказ товара
    location: Покупка товара/Заказ
  goods.payment:
    title: Оплата товара
    location: Покупка товара/Оплата

# Архитектурные компоненты. Из них строится ИТ архитектура.
components:

  # Компоненты верхнего уровня (L1 C4Model)
  user:                       # Идентификатор компонента
    title: Пользователь       # Название
    entity: actor             # Представление на схеме
    links:                    # Компоненты, с которыми происходит взаимодействие
      - id: system            # Идентификатор компонента
        direction: <-->       # Направление взаимодействия (<-- | -- | --> | <-->)
        title: Покупка        # Смысл взаимодействия
  system:
    title: Система
    entity: collections
    aspects:                  # Аспекты, которые реализует компонент
      - auth
      - goods
  # Внутренняя архитектура компонентов верхнего уровня (L2 C4Model)
  system.gateway:             # Иерархия компонентов определяется структурой их идентификаторов
    title: API шлюз
    entity: component
    links:
      - id: system.backend
        title: Бизнес API
        direction: <-->
        contract: https://editor.swagger.io/  # Можно указать контракт взаимодействия внешней ссылкой
      - id: system.auth
        title: Auth API
        direction: <-->
        contract: example                     # Или, контракт можно указывать идентификатором документа
    technologies:             # Технологии используемые в компоненте
      - HTTP
      - OAuth
  system.backend:
    title: Бэкенд
    entity: component
    links:
      - id: system.db
        direction: <-->
    aspects:
      - goods.order
      - goods.payment
    technologies:
      - PHP
      - Laravel

  # Детальная архитектура бэкенда (L3 C4Model)
  system.backend.core:
    title: Ядро
    entity: component
  system.backend.log:
    title: Подсистема логирования
    entity: component
  system.backend.business:
    title: Бизнес-логика
    entity: component

  system.auth:
    title: Авторизация
    entity: component
    aspects:
      - auth
    links:
      - id: system.db
        direction: <-->
    technologies:
      - Go
      - OAuth

  system.db:
    title: Хранилище
    entity: database
  system.db.business:
    title: Данные
    entity: database
    technologies:
      - PostgreSQL
  system.db.users:
    title: Пользователи
    entity: database
    technologies:
      - PostgreSQL

# Диаграммы представлений
contexts:
  overview:                   # Схема верхнего уровня представления (L1 C4Model)
    title: Обзор              # Название диаграммы
    location: Пример          # Размещение диаграммы в меню
    components:               # Компоненты, которые входят в диаграмму
      - system                # В данной диаграмме будет только один компонент
      - user
  system:                     # Архитектура системы (L2 C4Model)
    title: Устройство системы
    location: Пример/Система
    components:
      - system.*              # Можно указать wildcard включаемых компонентов в диаграмму
  system.backend:             # Архитектура бэкенда (L3 C4Model)
    title: Устройство бэкенда
    location: Пример/Система/Бэкенд
    components:
      - system.backend.*

# Документы
docs:
  example:
    location: Пример документа  # Размещение в меню
    # Ссылка может быть как на внешний ресурс, так на файл по относительному пути
    source: https://dochub.info/documentation/docs/manual/docs/examples/example.yaml
    type: openapi               # Тип документа (OpenApi | Markdown | PlantUML | Table)

# Описание технологического стека
technologies:
  sections:                           # Определение разделов стека
    languages:                         # Идентификатор раздела
      title: Языки программирования   # Название раздела
    frameworks:
      title: Фреймворки
    databases:
      title: Базы данных
    storages:
      title: Хранилища
    protocols:
      title: Протоколы
  items:                              # Перечисление технологий
    PHP:                              # Идентификатор технологии
      aliases:                        # Синонимы технологии
        - пыха
      title: Супер-крутой язык программирования   # Название технологии
      link: https://www.php.net/                  # Ссылка на документацию
      section: languages              # Идентификатор секции технологии
      status: adopt                   # Статус технологии adopt / trial / assess / hold
    Go:
      title: Go
      link: https://go.dev/
      section: languages
      status: trial
    Laravel:
      title: Laravel
      link: https://laravel.ru/
      section: frameworks
      status: trial
    PostgreSQL:
      title: PostgreSQL
      link: https://www.postgresql.org/
      section: databases
      status: assess
    HTTP:
      title: HTTP
      link: https://ru.wikipedia.org/wiki/HTTP
      section: protocols
      status: adopt
    OAuth:
      title: OAuth
      link: https://ru.wikipedia.org/wiki/OAuth
      section: protocols
      status: adopt

#******************************************************************************
#                          Теперь ты почти все знаешь!
#                    подробности на сайте https://dochub.info
#    Если появятся вопросы, нужна будет помощь или ты захочешь сделать свой
#           вклад в проект иди сюда - https://github.com/RabotaRu/DocHub
#******************************************************************************